package study.JavaAdvanced;

import java.lang.reflect.Array;
import java.util.*;

/**
 * date:2025.10.21
 * title:数据结构
 * author:fzy
 */
public class Java_1 {
    public static void main(String[] arg) {
//        DateStruct.array_struct();
//        DateStruct.list_struct();
//        collectionClass.test();
//    demoTest.test();
        collectionsTest.test();



    }
}

/*
集合
集合分为双列集合和单列集合
collection:单列
    元素可重复：list---ArrayList，LinkedList
    元素不可重复：set---HashSet，TreeSet
Map:双列 ---HashMap
 */
/*
Collection接口常用方法
    boolean add(E e) :添加元素
    boolean remove(Object o) :删除元素
    void clear() :清空集合
    boolean contains(Object 0) :判断集合是否含有某个元素
    boolean isEmpty() :判空
    int size() :获取集合长度
 */
class collectionClass {
    static void test() {
//        Collection<String> collections = new ArrayList<String>();
//        collections.add("付志宇");
//        collections.add("fufuu");
//        collections.add("张三");
//        collections.add("李四");
//        collections.remove("付志宇");
        /*
        迭代器
        Iterator
        next():返回迭代的下一个元素
        hasNext():如果迭代又更多元素，返回true
         */
//        Iterator<String> iterator = collections.iterator();
        //遍历集合
//        while (iterator.hasNext()) {
//            System.out.println(iterator.next());
//        }

        /*
        列表迭代器
        list.listIterator()获取
        E next():返回下一个元素
        boolean hasNext():如果迭代具有更多元素，返回true
        E previous():返回上一个元素
        boolean hasPrevious():略
        add(E e):将指定元素插入列表
         */
        listIteratorClass.listIteratorTest();
    }
}
//collections是List的工具类
class collectionsTest{
    static void test(){
        List<Integer> list = new ArrayList<>();
        list.add(50);
        list.add(10);
        list.add(94);
        //排序
        Collections.sort(list);
        System.out.println(list);
        //反转
        Collections.reverse(list);
        System.out.println(list);
        //打乱
        Collections.shuffle(list);
        System.out.println(list);


    }
}
class listIteratorClass{
    static void listIteratorTest(){
        List<String> s = new ArrayList<>();
        s.add("111");
        s.add("222");
        s.add("333");
        ListIterator<String> listIterator  = s.listIterator();
//        //正向便利 111,222,333
//        while (listIterator.hasNext()){
//            System.out.println("next"+listIterator.next());
//        }
//        //逆向便利 333,222,111
//        while (listIterator.hasPrevious()){
//            System.out.println("prev"+listIterator.previous());
//        }
        while (listIterator.hasNext()){
            if(listIterator.next().equals("222")){
                //这里使用迭代器的add方法，避免了并发错误
                listIterator.add("222");
            }
        }
        System.out.println(s);
        /*
        增强for循环的原理是一个迭代器，所以在增强for循环中添加元素可能会出现并发错误
         */
    }
}
class DateStruct {
    //数组
    //数组是一种基本的数据结构，可以存储固定大小的相同类型的元素，--固定大小--相同元素
    //随机访问速度快，插入删除速度较慢
    static void array_struct() {
        int[] int_array = new int[10];
        for (int a = 0; a < 10; a++) {
            int_array[a] = a;
        }
        System.out.println(Arrays.toString(int_array));
    }

    //列表
    //ArrayList，LinkedList
    //ArrayList：动态数组，可变大小，随机访问和快速尾部插入，中间插入删除慢
    //LinkedList：双向链表：元素之间通过指针连接，插入删除快，随机访问慢
    static void list_struct() {
        String[] string_arr = {"1", "2", "3", "4", "5"};
        ArrayList<Integer> int_array = new ArrayList<>();
        LinkedList<String> string_array = new LinkedList<>();
        //装箱
        for (int a = 0; a < 10; a++) {
            int_array.add(a);
        }
        for (String s : string_arr) {
            string_array.add(s);
        }
        System.out.println(int_array);
        System.out.println(string_array);
    }

    //集合
    //存储不重复的相同类型元素，hashset和TreeSet
    //HashSet：无序集合，基于hashMap实现，高校查找和插入，不保证顺序
    //TreeSet：有序集合，基于红黑树实现，不允许重复元素，自动排序，性能差，不能插入null
    static void set_struct() {
        HashSet<Integer> hashSet = new HashSet<>();
        TreeSet<String> treeSet = new TreeSet<>();
    }
    //
}

//案例
class demoTest{
    static void test(){
        StudentManager_collection studentManagerCollection = new StudentManager_collection();
        studentManagerCollection.addStu("付志宇",12);
        studentManagerCollection.addStu("付志3宇",23);
        studentManagerCollection.addStu("付3志宇",11);
        studentManagerCollection.addStu("付33dd志宇",1123);
        studentManagerCollection.logDb();
    }
}
class StudentManager_collection {
    private Collection<student> db = new ArrayList<>();

    void addStu(String name,int age) {
        db.add(new student(name,age));
    }

    Iterator<student> getDB() {
        return db.iterator();
    }

    void logDb() {
        Iterator<student> it = getDB();
        while (it.hasNext()) {
            student stu  =it.next();
            System.out.println(stu.name+","+stu.age);
        }
    }

}




